
package com.simple.mqtt.server.store;

import com.simple.mqtt.server.domain.Message;

import java.io.IOException;
import java.util.List;

/**
 * MQTT消息存储接口，负责持久化和管理MQTT消息
 * 主要功能包括：
 * - 存储和管理客户端的遗嘱消息
 * - 存储和管理主题的保留消息
 * - 提供消息查询和清理功能
 *
 * @author L.cm
 */
public interface IMqttMessageStore {

    /**
     * 存储 clientId 的遗嘱消息
     *
     * @param clientId clientId
     * @param message  message
     * @return boolean
     */
    public boolean addWillMessage(String clientId, Message message);

    /**
     * 清理该 clientId 的遗嘱消息
     *
     * @param clientId clientId
     * @return boolean
     */
    public boolean clearWillMessage(String clientId);

    /**
     * 获取 will 消息
     *
     * @param clientId clientId
     * @return Message
     */
    public Message getWillMessage(String clientId);

    /**
     * 存储 retain 消息
     *
     * @param topic   topic
     * @param timeout timeout
     * @param message message
     * @return boolean
     */
    public boolean addRetainMessage(String topic, int timeout, Message message);

    /**
     * 清理该 topic 的 retain 消息
     *
     * @param topic topic
     * @return boolean
     */
    public boolean clearRetainMessage(String topic);

    /**
     * 获取所有 retain 消息
     *
     * @param topicFilter topicFilter
     * @return Message
     */
    public List<Message> getRetainMessage(String topicFilter);

    /**
     * 清除所有，并释放资源
     */
    public default void clean() throws IOException {

    }
}
